////钻石继承问题的解决方法 --虚继承
////（1）公共虚基类子对象在汇聚子类对象中仅存一份实例
////（2）公共虚基类子对象被多个中间子类对象所共享
//#include <iostream>
//using namespace std;
//#pragma pack(1)
//class A {//公共基类
//public:
//	int m_a;
//};
//class X :virtual public A {//中间子类
//public:
//	int m_x;
//	void setAge(/*x*this*/int age) {
//		m_a = age;//(1)this(2)x中间子类子对象(3)指针1
//		//(4)偏移量(5)this+偏移量(6)公共虚基类子对象
//		//(7)m_a
//	}
//};
//class Y :public A {//中间子类
//public:
//	int m_y;
//	int getAge(/*Y*this*/) {
//		return m_a;//(1)this(2)Y中间子类子对象(3)指针2
//		//(4)偏移量(5)this+偏移量(6)公共虚基类子对象
//		//(7)m_a
//	}
//};
//class Z :public X, public Y {//汇聚子类
//public:
//	int m_z;
//	void foo() {
//		//m_a = 20;
//	}
//};
//int main(void) {
//	Z z;// |X中间子类对象|Y中间子类对象|m_z|A公共基类子对象|-->|指针1 m_x||指针2 m_y| m_z|
//		//|m_a m_x|m_a m_y|m_z|
//	cout << "汇聚子类对象z的大小:" << sizeof(z) << endl;//28
//	z.setAge(35);//setAge(&z,35) --> 实参类型是Z*（子类类型指针）
//	cout << z.getAge() << endl;//getAge(&z)-->实参类型Z*(子类类型指针)
//	return 0;
//}